/*
 * jQuery jModal 1.0
 * Esta modal pode receber na janela principal o conteudo em um elemento div, ou
 * em um elemento frame e ainda da a opção de quando clicar no botao fechar
 * fazer uma requisicao via get ajax para o retorna do resultado no elemento
 * especifico da pagina
 * Copyright (c) 2010 Revson Antonio
*/


(function($) {

    $.fn.jModal = function(jOptions) {
       
       $(this).click(function(e){
            e.preventDefault();
            $(this).unbind('click'); //remove o foco do elemento clicado.
        

            // variaveis da jModal
            var jSettings = $.extend({
                jBoxWidth : '320',
                jBoxHeight: '240',
                jUrl : 'default.php',
                jFrame : false,
                jCallBackUrl : '',
                jCallBackElement :'default'
            }, jOptions),
               jOverlay, jBox, jLoading, jContainer, jContainerFrame;

            jSettings.jBoxHeight = parseInt(jSettings.jBoxHeight);

            //Funcao resolve o bug de refresh no ie
            function ierr(url){
                   var index = url.indexOf('?');
                   var aleat = Math.random() * 5000;
                       aleat = Math.round(aleat);
                   if(index == '-1'){
                       return url+'?ie='+aleat;
                   }else{
                       return url+'&ie='+aleat;
                   }
                    
            }


            //Funcao para retornar os dados na pagina sem carregamento da mesma.
            jCallBack = function(){
                $.get(jSettings.jCallBackUrl ,function(data) {
                    $(jSettings.jCallBackElement).empty().html(data);
                });
            };

            

            //cria o elemento que div que sera o overlay e adiciona ao body
            jOverlay = $('<div id="jOverlay"></div>');
            $("body").append(jOverlay);
            jOverlay.css({
                'width':$(window).width()+'px',
                'height':$(document).height()+'px'
            });
            //exibindo a div jOverlay
            jOverlay.show();

            //cria a janela centraliza e adiciona ao body
            jBox = $('<div id="jBox"></div>');
            jBox.append('<span id="jBoxClose"></span>');
            $("body").append(jBox);
            jBox.css({
                'width':jSettings.jBoxWidth+'px',
                'height':jSettings.jBoxHeight+'px'
            });
            jBox.css("top", ( $(window).height() - jBox.height() ) / 2+$(window).scrollTop() + "px");
            jBox.css("left", ( $(window).width() - jBox.width() ) / 2+$(window).scrollLeft() + "px");

            //cria o elemento div jLoading e centraliza que sera o marcador de tempo do ajax
            jLoading = $('<div id="jLoading"></div>');
            $("body").append(jLoading);
            jLoading.append('<img id="jImgLoading" src="plugins/jmodal/20.gif" />');
            jLoading.append('<span id="jTextLoading">Carregando...</span>');
            jLoading.css("top", ( $(window).height() - jLoading.height() ) / 2+$(window).scrollTop() + "px");
            jLoading.css("left", ( $(window).width() - jLoading.width() ) / 2+$(window).scrollLeft() + "px");

            // Funcao para finalizar o carregamento.
            caller = function(){
                
                setTimeout(function(){
                   jLoading.fadeOut(100);
                }, 500); 

            };

            
            //verifica se jFrame é falso para criar o elemento div jContainer ou
            //o elemento iframe jContainerFrame
            if(jSettings.jFrame == false){
                //janela recebe o container
                jContainer = $('<div id="jContainer"></div>');
                jBox.append(jContainer);
               
                //exibe o elemento div jLoading no inicio da requisicao ajax via get
                jLoading.ajaxStart(function(){
                    $(this).show();                    
                });

                //requisicao do ajax
                $.get(ierr(jSettings.jUrl) ,function(data) {
                    jContainer.empty().html(data);
                });

                //apos a finalizacao do ajax, fecha o loading e abre a janela.
                jLoading.ajaxStop(function(){
                    caller();
                    jBox.show();
                });           
        
            }else if(jSettings.jFrame == true){
                //cria e centraliza na tela o elemento iframe jContainerFrame
                //e adiciona ao body
                jContainerFrame = $('<iframe></iframe>');
                jContainerFrame.attr({
                    'id' : 'jContainerFrame',
                    'src' : jSettings.jUrl,
                    'frameborder':'0',
                    'scrolling' : 'no',
                    'width' : jSettings.jBoxWidth,
                    'height' : (jSettings.jBoxHeight-26)
                });
                jBox.append(jContainerFrame);
                
                jLoading.show();
                jBox.show();
                caller();
               
            }

             //botao fechar da janela
            $("#jBoxClose").click(function(){
                if(jSettings.jCallBackUrl != ''){
                    jCallBack();
                }
                jBox.remove();
                jLoading.remove();
                jOverlay.remove();
            });
            
        });

    };

})(jQuery);